//
//  MKAPIHttpRequestAFNetworking.h
//  MKAPI
//
//  Created by 苏尚进 on 2022/8/26.
//  Copyright © 2022 moon. All rights reserved.
//

#import "MKAPIHttpRequestBase.h"
#import <AFNetworking/AFNetworking.h>

NS_ASSUME_NONNULL_BEGIN
@interface MKAPIHttpRequestAFNetworking : MKAPIHttpRequestBase
@property(nonatomic,strong,nullable) NSURLSessionConfiguration *sessionConfiguration;
@property(nonatomic,readonly) AFHTTPSessionManager *httpSessionManager;
@property(nonatomic,assign) BOOL validateServerHttpsCerts;//是否验证服务器的ssl证书,默认为NO
@property(nonatomic,strong,nullable) NSArray<NSData *> *serverHttpsCerts;//待验证的服务器ssl证书列表，可以使用NSString的mkapi_secPemData方法，将PEM格式的证书字符串转为证书二进制数据

@property(nonatomic,assign) BOOL validateClientHttpsCerts;//是否服务器检验客户端的ssl证书,默认为NO
@property(nonatomic,strong,nullable) NSURLCredential *clientHttpsCert;//客户端使用的ssl证书，用于服务端检验客户端证书
@property(nonatomic,readonly,nullable) NSURLSessionTask *sessionTask;

//进行https证书检验，子类可以进行重载，以覆盖默认实现
- (NSURLSessionAuthChallengeDisposition)sessionAuthenticationChallengeWithSession:(NSURLSession *)session challenge:(NSURLAuthenticationChallenge *)challenge credential:(NSURLCredential *_Nullable*_Nullable)credential;

/// 即将发送请求，空实现，子类可以重载
- (void)willSendRequest:(NSMutableURLRequest *)request;
@end
NS_ASSUME_NONNULL_END

/*
 AFNetworking的4.0.1版本，AFHTTPSessionManager类，当设置了sessionDidReceiveAuthenticationChallenge之后，在release模式下，该sessionDidReceiveAuthenticationChallenge的block并不会被调用（原因是respondsToSelector：方法的底层逻辑问题），从而导致ssl证书检验代码不会被执行（debug模式下正常！）。解决方法是将sessionDidReceiveAuthenticationChallenge相关代码恢复到3.1.0
 */
NS_ASSUME_NONNULL_BEGIN
@interface MKAPIAFHTTPSessionManager : AFHTTPSessionManager
@end
NS_ASSUME_NONNULL_END
